package Sonnet;

import java.awt.*;
import java.awt.image.*;

//import javax.swing.SwingUtilities;
/*import javax.imageio.ImageIO;

import java.io.File;
import java.io.IOException;

//Stuff From Java E-Democracy Software
import javax.swing.*;

//import java.awt.TextArea;
//import java.awt.BorderLayout;
//import javax.swing.JTree.*;
//import java.awt.event.KeyEvent;
//import javax.swing.AbstractButton.*;
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.awt.GridLayout;
import java.awt.BorderLayout;
//import java.awt.event.KeyEvent;

//import org.gerhardb.lib.swing.*;


import javax.swing.ImageIcon;
import javax.swing.JLabel;
//import javax.swing.JButton;

import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

import java.awt.Dimension;

import javax.swing.JPanel;*/
import javax.swing.JFrame;
/*import javax.swing.JComponent;

import javax.swing.UIManager;

import java.awt.Toolkit;*/


/*
v/ Kabala - Unknown Artist
v/ Grand Unified Theory - Paul Oakenfold - Perfecto Presents Another World CD 1.mp3
v/ Supreme Matrix Theory - Paul Oakenfold - Perfecto Presents Another World II.mp3
v/ Cyberology - Ken Ishii Discography
v/ HealPacks - super furry animals - juxtaposed with u.mp3
v/ Sky Net - Paul Oakenfold - Essential Mix in China.mp3 + Paul Oakenfold - Miami Part 2.mp3
v/ Infinite Number Theorem - Sasha Discography
v/ Poisonoloy - Robert Miles Discography
v/ FountainOfYouth.info - (2006-01-01) Radio 1 Essential Mix - Sasha.mp3
v/ Shill: Sherri Kane the Confuser - Massive Attack
v/ Nuclear War - E:\MP3s\Game Music\Fallout 1 - A Post Nuclear Role-Playing Game Soundtrack\01 - Ink Spots - Maybe (fallout theme).mp3 And The Rest
v/ E-Democracy - E:\MP3s\Game Music\DeusEX\  25:23
v/ Grand Windmill - Paul Oakenfold - Global Underground NYC.mp3  54:09
Progenitor Aliens - E:\MP3s\Anbrok\01-anbrok_-_anbrok_sessions_051.mp3  240:01
v/ Jewlluminati History - Infected Mushrooom Discography
My Life Story - Silence - Skin (Valentino Kanzyani Mix).mp3   E:\MP3s\Anbrok\02-anbrok_-_anbrok_sessions_050_progressive_yearmix.mp3  4:08 + 89:55
How The War Was Won - E:\MP3s\Robs Music\CD 4\01 Track 1.mp3 -> 13  79:14
Peace De La NanoRenasance - E:\MP3s\Robs Music\CD 3\04 Track 4.mp3     (2005-11-06 00-59) The Essential Mix BBC Radio 1- M.A.N.D.Y.mp3  2:39 + 122:37
How The Government Caused 911 - Rammstein  91:47
Sky Command - Nine Inch Nails Discography + All Quake Songs + E:\MP3s\Juno Reactor - The Remixes (1993-2003)\Juno Reactor & Don Davis - Mona Lisa Overdrive.mp3
139:53 + 28:47 + 180:06 + 4:45
Book Of The Law Explained - Hybrid Discography  587:11
My Previous Incarnations - Red Yellow Blue With Green Text BlackGreen.css - DJ Mystik - Lost in trance.mp3  2:54
Mental Health Gulag - Underworld  189:23
Elven Alliance.com - Lords of Acid  72:02
v/ MainPage - KMFDM + DJ Beck - Super Mix(feat.303Infinity,ATC,ATB,Alya,DJScott,BT,Prodigy,RobertMiles,PetShopBoys,Okenfold,DJ.mp3
Avatars and Pictures - Bt Discography 436:14
v/ Supreme Magic Spell Book - OMD - Secret (12 inch mix).mp3
v/ Magic Gizmos - C:\Users\Alex\Desktop\1st Drawr\BackgroundRecordings\Deadmau5 From MP3 Player\[2006] Get Scraped  66:14
v/ Illuminati's Greatest Secret - DeadMause on MP3 Player   198:10
All Sizes Are 1422x860
2351 Left 32.327 Gigs Left To Do
 */


class Sonnet
{
	static int initialScreenSizeX = 1440, initialScreenSizeY = 900;//862
	static Dimension Dim = new Dimension(initialScreenSizeX, initialScreenSizeY), DimCheck = new Dimension(initialScreenSizeX, initialScreenSizeY), HalfedDim = new Dimension( (initialScreenSizeX + 1) / 2 - 1, (initialScreenSizeY - 60 + 1) / 2 -1);
	static BufferedImage I = new BufferedImage(Dim.width, Dim.height, BufferedImage.TYPE_INT_RGB);
	static int borderSizeX = Dim.width/12, borderSizeY = Dim.height/6;
	static int choice = 0;//0 is SkyNet Pyramid, 1 is Full Spectral Rainbow, 2 is Y and Sonnet
	static final int numberOfColorsInTheRainbow = 7;//asdf
	static final Color red = new Color( new double[]{193,0,0} );
	static final Color orange = new Color( new double[]{255,134,0} );
	static final Color yellow = new Color( new double[]{246,252,15} );
	static final Color green = new Color( new double[]{0,133,50} );
	static final Color teal = new Color( new double[]{3,224,149} );
	static final Color blue = new Color( new double[]{0,0,192} );
	static final Color purple = new Color( new double[]{122,0,178} );
	static final Color black = new Color( new double[]{0,0,0} );
	static final Color white = new Color( new double[]{255,255,255} );
	static final Color brown = new Color( new double[]{131,103,71} );
	static final Color bronze = new Color( new double[]{152,123,46} );
	static final Color silver = new Color( new double[]{193,192,192} );
	static final Color gold = new Color( new double[]{205,191,44} );
	static final Color lime = new Color( new double[]{126,193,33} );
	static final Color pink = new Color( new double[]{255,64,143} );

	static public void main(String[] args) throws InterruptedException
	{
		JFrame f = new JFrame("Sonnet");
		f.add("Center", new MainCanvas());
		f.setSize(Dim);// + 22 on Y in example for some reason
		f.setExtendedState(JFrame.MAXIMIZED_BOTH);
		f.setResizable(true); // THEN  resizable = false
		f.setVisible(true);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		WritableRaster wr = I.getRaster();
		int x = 0, y = 0, xSlider = 0, a = 0, xMinusxSlider = 0, yMinusxSlider = 0, cxMx = 0, ySlider = 0, yMinusySlider = 0, cyMy = 0,  b = 0, xSliderFactor = 1, xSliderBackAndFourth = 1;//cxMx Corrected xMinusSlider for determining color
		Color color = new Color( new double[]{0,0,0} );
		double colorInterval = Dim.width / ( numberOfColorsInTheRainbow - 1 );
		int cx = Math.round( (Dim.width + 1  ) / 2 - 1 );//Uncomment For Circular Rainbow
		int cy = Math.round( (Dim.height - 60 + 1 ) / 2 - 1 );//Uncomment For Circular Rainbow
		//int xSliderZoomFactor = 1;
		double totalAngleUnits = 0;//Uncomment For Circular Rainbow
		//double spectralBrightnessMultiplyer = 1/2;
		boolean TrispectralRainbow = false;
		//Dimension DimLast = Dim;
		//Thread.sleep(4000);
		while (choice != 4)
		{
			if (choice == 0)
			{
				//Dimension DimLast = Dim;
				Dim = f.getSize();//Dim = f.getContentPane().getSize();
				HalfedDim.width = Math.round( ( Dim.width + 1 ) / 2 - 1 );
				HalfedDim.height = Math.round( ( Dim.height - 37 ) / 2 - 1 );
				//DimCheck = Dim;
				//cy = Math.round( (Dim.height + 1 ) / 2 - 1 );//Use Only For Circular Rainbow When Not Moving
				//colorInterval = Dim.width / ( numberOfColorsInTheRainbow - 1 );//Use For Noncircular Rainbow
				//colorInterval = Dim.height / ( 2 * ( numberOfColorsInTheRainbow - 1 ) );//Use Only for Circular Rainbow Without xSlider
				colorInterval = ( Dim.height - 53 ) / ( 2 * ( numberOfColorsInTheRainbow - 1 ) );//Use Only for Circular Rainbow
				if (TrispectralRainbow == true)
					colorInterval = colorInterval / 3;//For Trispectral Rainbow.
				//double colorDisplacement = HalfedDim.height * (1 - 0.175979734764);//For Thin Rainbow Ring
				//double colorDisplacement = HalfedDim.height * (1 - 0.5);//For Thick Rainbow Ring
				double colorDisplacement = 0;//For Rainbow Disk And 0 Rainbow Clock
				double radialDistance = Math.pow(Math.pow(HalfedDim.width + 1, 2) + Math.pow(HalfedDim.height + 1, 2), 0.5);
				for (xSlider = (int)Math.round(colorDisplacement); xSlider < radialDistance * 2 * Math.PI; xSlider++)// < For Rainbow Clock, xSlider = (int)Math.round(colorDisplacement); For Rings -144 Use cy And < HalfedDim.height Instead of Dim.height For Circular Rainbow Use Dim.width < For Rainbow Slider And Fractal //Start At -144 For Videos And Pictures
				{//0.175979734764 * 
				//xSlider = (int)Math.round(colorDisplacement);//For No Slider Rainbow Ring
				//xSlider = 0;//For No Slider Rainbow Disk
					//f.setResizable(false);
					Dim = f.getSize();//Dim = f.getContentPane().getSize();
					HalfedDim.width = Math.round( ( Dim.width + 1 ) / 2 - 1 );
					HalfedDim.height = Math.round( ( Dim.height - 37 ) / 2 - 1 );
					radialDistance = Math.pow(Math.pow(HalfedDim.width + 1, 2) + Math.pow(HalfedDim.height + 1, 2), 0.5);
					/*if (Dim != DimCheck)
					{
						for (int xRefresh = 0; xRefresh < Dim.width; xRefresh++)
							for (int yRefresh = 0; yRefresh < Dim.height - 16; yRefresh++)
								wr.setPixel(xRefresh, yRefresh, black.RGB);
						DimCheck = Dim;
					}//*/
					//f.setResizable(true);
					//Uncomment For Smaller And Smaller Circles When Resized
					/*if (xSlider < 240)
						xSliderBackAndFourth = xSlider;
					else
						xSliderBackAndFourth = 480 - xSlider;//*/
					//xSliderZoomFactor = (int)Math.pow(xSliderBackAndFourth , 0.24);//Use Only For Fractal In Certain Case
					//xSliderFactor = (int)Math.pow(xSliderBackAndFourth , 1.20);//Use Only For Fractal*/
					//colorInterval = ( Dim.height - 53) / ( 2 * ( numberOfColorsInTheRainbow - 1 ) ) * 0.175979734764;//For Thin Rainbow Ring, Use Only for Circular Rainbow * 0.175979734764
					//colorInterval = ( Dim.height - 53) / ( 2 * ( numberOfColorsInTheRainbow - 1 ) ) * 0.5;//For Thick Rainbow Ring, Use Only for Circular Rainbow * 0.175979734764
					double fullAngle = 2 * Math.PI * radialDistance;//For Rainbow Clock
					colorInterval = fullAngle / ( numberOfColorsInTheRainbow - 1 );//For Rainbow Clock
					//colorInterval = HalfedDim.height / ( numberOfColorsInTheRainbow - 1 );//For Rainbow Disk
					//colorInterval = colorInterval * 0.175979734764;//USE ONLY FOR VIACAD EMBLEM
					//colorDisplacement = HalfedDim.height * (1 - 0.175979734764);
					//colorDisplacement = HalfedDim.height * (1 - 0.5);//For Thick Rainbow Ring
					colorDisplacement = 0;//For Rainbow Disk
					//colorInterval = Dim.width / ( numberOfColorsInTheRainbow - 1 );//For Noncircular Rainbows*/
					//cx = Math.round( (Dim.width + 1  ) / 2 - 1 );//Use Only For Circular Rainbow
					//cy = Math.round( (Dim.height - 37 ) / 2 - 1 );//Use Only For Circular Rainbow
					//ySlider =  xSlider * Dim.height / Dim.width;*/
					for (x = 0; x < Dim.width; x++)//Comment Out Here For Circular Rainbow
					{//Comment Out Here For Circular Rainbow
						//xMinusxSlider = x - xSlider;// To Test Moving Rainbow From Left To Right
						//xMinusxSlider = x;//For Testing Only!
						//if ( xMinusxSlider < 0 )// To Test Moving Rainbow From Left To Right
						//	cxMx = xMinusxSlider + Dim.width;// To Test Moving Rainbow From Left To Right
						//else cxMx = xMinusxSlider;// To Test Moving Rainbow From Left To Right
						
						//USE BELOW FOR NEW CIRCULAR RAINBOWS
						for (y = 0; y < Dim.height - 37; y++)
						{
							//Use To //*/ For Rainbow Clock
							double angle = ( Math.atan2( (x - HalfedDim.width + 1) , (y - HalfedDim.height + 1 ) ) + Math.PI ) * radialDistance + xSlider;
							if (angle < 0)
								angle = angle + fullAngle;
							else
								if (angle > fullAngle)
									angle = angle - fullAngle;
							//angle = 0;//Testing Purposes Only.
							if ( angle < colorInterval)//For Normal Rainbow Use This Instead Of The Others
								color.ColorSlider(colorInterval, angle, red, orange);
							else if ( angle < 2 * colorInterval )
								color.ColorSlider(colorInterval, angle - colorInterval, orange, yellow);
							else if ( angle < 3 * colorInterval )		
								color.ColorSlider(colorInterval, angle - 2 * colorInterval, yellow, green);
							else if ( angle < 4 * colorInterval )
								color.ColorSlider(colorInterval, angle - 3 * colorInterval, green, teal);
							else if ( angle <  5 * colorInterval )
								color.ColorSlider(colorInterval, angle - 4 * colorInterval, teal, blue);
							else
								color.ColorSlider(colorInterval, angle - 5 * colorInterval, blue, purple);//*/
							//yMinusxSlider = y - ySlider;// To Test Moving Rainbow From Left To Right
							//xMinusxSlider = x;//For Testing Only!
							/*if ( yMinusxSlider < 0 )// To Test Moving Rainbow From Left To Right USELESS CODE
								cyMy = yMinusxSlider + Dim.width;// To Test Moving Rainbow From Left To Right
							else cyMy = yMinusxSlider;// To Test Moving Rainbow From Left To Right*/
							/*double radialDistance = Math.pow(Math.pow(x - HalfedDim.width + 1, 2) + Math.pow( y - HalfedDim.height + 1, 2), 0.5);
							double radius = radialDistance - xSlider + colorDisplacement;
							if ( radius < colorDisplacement)//For Rainbow Ring
								radius = radius + HalfedDim.height - colorDisplacement;//For Rainbow Ring Take Out - 38
							if ( radius >= colorDisplacement && radius < 6 * colorInterval  + colorDisplacement)//For Purple Outside Ring
							{
								if ( radius < colorInterval  + colorDisplacement)//For Normal Rainbow Use This Instead Of The Others
									color.ColorSlider(colorInterval, radius - colorDisplacement, red, orange);
								else if ( radius < ( 2 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - colorInterval - colorDisplacement, orange, yellow);
								else if ( radius < ( 3 * colorInterval  + colorDisplacement) )		
									color.ColorSlider(colorInterval, radius - 2 * colorInterval - colorDisplacement, yellow, green);
								else if ( radius < ( 4 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - 3 * colorInterval - colorDisplacement, green, teal);
								else if ( radius < ( 5 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - 4 * colorInterval - colorDisplacement, teal, blue);
								else
									color.ColorSlider(colorInterval, radius - 5 * colorInterval - colorDisplacement, blue, purple);
							}//*/
							/*if ( radius >= colorDisplacement && radius < 6 * colorInterval  + colorDisplacement)//For Purple Center Ring Make 6 * colorInterval Replaced With HalfedDim.height For Efficiency
							{
								if ( radius < colorInterval  + colorDisplacement)//For Normal Rainbow Use This Instead Of The Others
									color.ColorSlider(colorInterval, radius - colorDisplacement, purple, blue);
								else if ( radius < ( 2 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - colorInterval - colorDisplacement, blue, teal);
								else if ( radius < ( 3 * colorInterval  + colorDisplacement) )		
									color.ColorSlider(colorInterval, radius - 2 * colorInterval - colorDisplacement, teal, green);
								else if ( radius < ( 4 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - 3 * colorInterval - colorDisplacement, green, yellow);
								else if ( radius < ( 5 * colorInterval  + colorDisplacement) )
									color.ColorSlider(colorInterval, radius - 4 * colorInterval - colorDisplacement, yellow, orange);
								else
									color.ColorSlider(colorInterval, radius - 5 * colorInterval - colorDisplacement, orange, red);
							}//*/
							/*else
							{
								if ( radius < ( 7 * colorInterval ) )//For Normal Rainbow Use This Instead Of The Others
									color.ColorSlider(colorInterval, radius - 6 * colorInterval, red, orange);
								else if ( radius < ( 8 * colorInterval ) )
									color.ColorSlider(colorInterval, radius - 7 * colorInterval, orange, yellow);
								else if ( radius < ( 9 * colorInterval ) )		
									color.ColorSlider(colorInterval, radius - 8 * colorInterval, yellow, green);
								else if ( radius < ( 10 * colorInterval ) )
									color.ColorSlider(colorInterval, radius - 9 * colorInterval, green, teal);
								else if ( radius < ( 11 * colorInterval ) )
									color.ColorSlider(colorInterval, radius - 10 * colorInterval, teal, blue);
								else
									color.ColorSlider(colorInterval, radius - 11 * colorInterval, blue, purple);//*/
							//}
							//if (colorDisplacement <= radialDistance && radialDistance <= HalfedDim.height )//For Rainbow Disk And Ring Only I Think Only Needed Because Something Broken Which Is -37 On y For Statement
							wr.setPixel( x, y, color.RGB );//(double[])red.get());
						}
						//USE ABOVE FOR NEW CIRCULAR RAINBOWS

						//for (y = 0; y < Dim.height - 60; y++)//Comment Out Here For Rainbow Slider
						//{//Comment Out Here For Rainbow Slider
						//yMinusySlider = y - ySlider;//Comment Out Here For Rainbow Slider
						//yMinusySlider = y;//For Testing Only!
						//Comment Out Below For Rainbow Slider
						//if ( yMinusySlider < 0)// To Test Moving Rainbow From Left To Right
						//	cyMy = yMinusySlider + Dim.height;// To Test Moving Rainbow From Left To Right
						//else cyMy = yMinusySlider;// To Test Moving Rainbow From Left To Right
						/*if ( ( y - Dim.height / 2 ) != 0)// && y != 0
							{
								//a = - ( x - Dim.width / 2 ) / xSliderZoomFactor - ( y - 44 * xSlider - Dim.height / 2 ) * Dim.height / ( x - Dim.width / 2 ) * xSliderFactor / Dim.height;
								a = - ( y + 246 * xSliderBackAndFourth - Dim.height / 2 ) - ( x + 24 * xSliderBackAndFourth - Dim.width * 2 ) * Dim.width / ( y - Dim.height / 2 ) * xSliderFactor / Dim.width;
								while ( a < 0 )
									a = (int)(a + 6 * colorInterval);
								while ( a > 6 * colorInterval )
									a = (int)(a - 6 * colorInterval);
								if ( a < colorInterval )//For Normal Rainbow Use This Instead Of The Others
									color.ColorSlider(colorInterval, a, red, orange);
								else if ( a < ( 2 * colorInterval ) )
									color.ColorSlider(colorInterval, a - colorInterval, orange, yellow);
								else if ( a < ( 3 * colorInterval ) )		
									color.ColorSlider(colorInterval, a - 2 * colorInterval, yellow, green);
								else if ( a < ( 4 * colorInterval ) )
									color.ColorSlider(colorInterval, a - 3 * colorInterval, green, teal);
								else if ( a < ( 5 * colorInterval ) )
									color.ColorSlider(colorInterval, a - 4 * colorInterval, teal, blue);
								else
									color.ColorSlider(colorInterval, a - 5 * colorInterval, blue, purple);
							}
							else color.RGB = black.RGB;
							wr.setPixel( x, y, color.RGB );
						}
					//Comment Out Above For Rainbow Slider /*

					/*if ( cxMx < colorInterval ) // Cyberology - Ken Ishii Discography
    					color.ColorSlider(colorInterval, cxMx, yellow, blue);
	  				else
	  					color.ColorSlider(colorInterval, cxMx - colorInterval, blue, purple);//*/

						/*if ( cxMx < colorInterval ) // HealPacks - super furry animals - juxtaposed with u.mp3
    					color.ColorSlider(colorInterval, cxMx, yellow, red);
	  				else
	  					color.ColorSlider(colorInterval, cxMx - colorInterval, red, purple);//*/

						/*if ( cxMx < colorInterval ) // Sky Net - Paul Oakenfold - Essential Mix in China.mp3 + Paul Oakenfold - Miami Part 2.mp3    					color.ColorSlider(colorInterval, cxMx, red, silver);
    					color.ColorSlider(colorInterval, cxMx, red, silver);
    				else if ( cxMx < ( 2 * colorInterval ) )	
    					color.ColorSlider(colorInterval, cxMx - colorInterval, silver, gold);
    				else		
    					color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, gold, blue);//*/

						//color.ColorSlider(colorInterval, cxMx, green, purple);//Infinite Number Theorem

						/*if ( cxMx < colorInterval ) // Fountain of Youth
    					color.ColorSlider(colorInterval, cxMx, red, black);
    				else
    					color.ColorSlider(colorInterval, cxMx - colorInterval, blue, purple);//*/



						/*if ( cxMx < colorInterval ) // Shill
    					color.ColorSlider(colorInterval, cxMx, red, black);
    				else
    					color.ColorSlider(colorInterval, cxMx - colorInterval, black, red);//*/

						/*if ( cxMx < colorInterval ) // Grand Windmill
    					color.ColorSlider(colorInterval, cxMx, bronze, silver);
    				else if ( cxMx < ( 2 * colorInterval ) )	
    					color.ColorSlider(colorInterval, cxMx - colorInterval, silver, gold);
    				else		
    					color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, gold, black);//*/

						/*if ( cxMx < colorInterval ) // Poisonology
    					color.ColorSlider(colorInterval, cxMx, green, green);
    				else if ( cxMx < ( 2 * colorInterval ) )	
    					color.ColorSlider(colorInterval, cxMx - colorInterval, green, blue);
    				else if ( cxMx < ( 3 * colorInterval ) )	
    					color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, blue, green);
    				else if ( cxMx < ( 4 * colorInterval ) )	
    					color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, green, green);//*/

						/*if ( cxMx < colorInterval ) // Nuclear War
    					color.ColorSlider(colorInterval, cxMx, red, green);
					else if ( cxMx < ( 2 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - colorInterval, green, black);
					else if ( cxMx < ( 3 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, black, white);
					else if ( cxMx < ( 4 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, white, black);
					else if ( cxMx < ( 5 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - 4 * colorInterval, black, green);
					else
						color.ColorSlider(colorInterval, cxMx - 5 * colorInterval, green, red);//*/

						/*if ( cxMx < colorInterval ) // E-Democracy
    					color.ColorSlider(colorInterval, cxMx, green, gold);
					else if ( cxMx < ( 2 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - colorInterval, gold, red);
					else if ( cxMx < ( 3 * colorInterval ) )		
						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, red, purple);
					else if ( cxMx < ( 4 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, purple, white);
    				else if ( cxMx < ( 5 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 4 * colorInterval, white, black);
    				else if ( cxMx < ( 6 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 5 * colorInterval, black, orange);
    				else if ( cxMx < ( 7 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 6 * colorInterval, orange, yellow);
    				else if ( cxMx < ( 8 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 7 * colorInterval, yellow, blue);
    				else if ( cxMx < ( 9 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 8 * colorInterval, blue, silver);
    				else if ( cxMx < ( 10 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 9 * colorInterval, silver, brown);
    				else
    					color.ColorSlider(colorInterval, cxMx - 10 * colorInterval, brown, bronze);//*/





						/*if ( cxMx < colorInterval ) // Main Page - KMFDM +  + DJ Beck - Super Mix(feat.303Infinity,ATC,ATB,Alya,DJScott,BT,Prodigy,RobertMiles,PetShopBoys,Okenfold,DJ.mp3
    					color.ColorSlider(colorInterval, cxMx, red, green);
					else if ( cxMx < ( 2 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - colorInterval, green, blue);
					else		
						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, blue, red);//*/

						/*if ( cxMx < colorInterval ) // BAD!!! Main Page - KMFDM
    					color.ColorSlider(colorInterval, cxMx, red, bronze);
					else if ( cxMx < ( 2 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - colorInterval, bronze, silver);
					else if ( cxMx < ( 3 * colorInterval ) )		
						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, silver, gold);
					else if ( cxMx < ( 4 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, gold, green);
    				else if ( cxMx < ( 5 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 4 * colorInterval, green, green);
    				else if ( cxMx < ( 6 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 5 * colorInterval, green, gold);
    				else if ( cxMx < ( 7 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 6 * colorInterval, gold, silver);
    				else if ( cxMx < ( 8 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 7 * colorInterval, silver, bronze);
    				else if ( cxMx < ( 9 * colorInterval ) )
    					color.ColorSlider(colorInterval, cxMx - 8 * colorInterval, bronze, blue);
    				else
    					color.ColorSlider(colorInterval, cxMx - 9 * colorInterval, blue, blue);//*/



						/*if ( cxMx < colorInterval ) // Jewlluminati History
    					color.ColorSlider(colorInterval, cxMx, blue, red);
    				else
    					color.ColorSlider(colorInterval, cxMx - colorInterval, red, blue);//*/

						/*if ( cxMx < colorInterval ) // My Life Story
    					color.ColorSlider(colorInterval, cxMx, green, red);
					else
						color.ColorSlider(colorInterval, cxMx - colorInterval, red, green);//*/



						/*if ( cxMx < colorInterval ) // Sky Command
    					color.ColorSlider(colorInterval, cxMx, red, orange);
					else if ( cxMx < ( 2 * colorInterval ) )
						color.ColorSlider(colorInterval, cxMx - colorInterval, orange, yellow);
					else if ( cxMx < ( 3 * colorInterval ) )		
						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, yellow, lime);
					else
						color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, lime, green);//*/




						/*if ( cxMx < colorInterval )//For Normal Rainbow Use This Instead Of The Others
							color.ColorSlider(colorInterval, cxMx, red, orange);
						else if ( cxMx < ( 2 * colorInterval ) )
							color.ColorSlider(colorInterval, cxMx - colorInterval, orange, yellow);
						else if ( cxMx < ( 3 * colorInterval ) )		
							color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, yellow, green);
						else if ( cxMx < ( 4 * colorInterval ) )
							color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, green, teal);
						else if ( cxMx < ( 5 * colorInterval ) )
							color.ColorSlider(colorInterval, cxMx - 4 * colorInterval, teal, blue);
						else
							color.ColorSlider(colorInterval, cxMx - 5 * colorInterval, blue, purple);//*/


						/*if ( cxMx <= ( 6 * colorInterval ) )
    				{
    					if ( cxMx < colorInterval )	
        					color.ColorSlider(colorInterval, cxMx, 0.5, red, orange);
    					else if ( cxMx < ( 2 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - colorInterval, 0.5, orange, yellow);
    					else if ( cxMx < ( 3 * colorInterval ) )		
    						color.ColorSlider(colorInterval, cxMx - 2 * colorInterval, 0.5, yellow, green);
    					else if ( cxMx < ( 4 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - 3 * colorInterval, 0.5, green, teal);
        				else if ( cxMx < ( 5 * colorInterval ) )
        					color.ColorSlider(colorInterval, cxMx - 4 * colorInterval, 0.5, teal, blue);
        				else
        					color.ColorSlider(colorInterval, cxMx - 5 * colorInterval, 0.5, blue, purple);
    				}
    				else if ( cxMx <= ( 12 * colorInterval ) )
    				{
    					if ( cxMx < ( 7 * colorInterval ) )	
        					color.ColorSlider(colorInterval, cxMx - 6 * colorInterval, red, orange);
    					else if ( cxMx < ( 8 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - 7 * colorInterval, orange, yellow);
    					else if ( cxMx < ( 9 * colorInterval ) )		
    						color.ColorSlider(colorInterval, cxMx - 8 * colorInterval, yellow, green);
    					else if ( cxMx < ( 10 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - 9 * colorInterval, green, teal);
        				else if ( cxMx < ( 11 * colorInterval ) )
        					color.ColorSlider(colorInterval, cxMx - 10 * colorInterval, teal, blue);
        				else
        					color.ColorSlider(colorInterval, cxMx - 11 * colorInterval, blue, purple);
    				}
    				else
    				{
    					if ( cxMx < ( 13 * colorInterval ) )	
        					color.ColorSlider(colorInterval, cxMx - 12 * colorInterval, 2, red, orange);
    					else if ( cxMx < ( 14 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - 13 * colorInterval, 2, orange, yellow);
    					else if ( cxMx < ( 15 * colorInterval ) )		
    						color.ColorSlider(colorInterval, cxMx - 14 * colorInterval, 2, yellow, green);
    					else if ( cxMx < ( 16 * colorInterval ) )
    						color.ColorSlider(colorInterval, cxMx - 15 * colorInterval, 2, green, teal);
        				else if ( cxMx < ( 17 * colorInterval ) )
        					color.ColorSlider(colorInterval, cxMx - 16 * colorInterval, 2, teal, blue);
        				else
        					color.ColorSlider(colorInterval, cxMx - 17 * colorInterval, 2, blue, purple);
    				}//*/

						//GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER!
						//GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER!
						//GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER!
						//GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER! GO HERE FOR RAINBOW SLIDER!
						//for (y = 0; y < Dim.height - 60; y++)//For Sideways Rainbow Works On My Machine.
						//	wr.setPixel( x, y, color.RGB );//(double[])red.get());

						//if (x < Dim.height) //For Diagonal Rainbow Works On My Machine.
						//	for (y = x; y >= 0; y--)
						//		wr.setPixel( x - y, y, color.RGB);
						//else
						//	for (y = Dim.height - 1; y >= 0; y--)
						//		wr.setPixel( x - y, y, color.RGB);//*/
						//colorInterval = colorInterval * 0.175979734764;//USE ONLY FOR VIACAD EMBLEM
						/*double colorDisplacement = 0;//cy * (1 - 0.175979734764);
					for (int r = 0; r <= cy; r++)//r = 346 Use Below For Circular RainbowFor Normal Rainbow Use This Instead Of The Other 3
					{
						cxMx = r - xSlider;//HERE HERE HERE WAS SLIDER
						//cxMx = r;//For NonMoving Rainbow
						if ( cxMx < 0)//346
							cxMx = cxMx + cy;
						//cxMx = (int)(cxMx + 0.175979734764 * cy);//Use For Ring

						//color.ColorSlider(colorInterval, cxMx, green, purple);//Uncomment For Green Purple Circular Picture

						if ( cxMx <= ( 6 * colorInterval + colorDisplacement ) )
						{
							if ( cxMx < colorInterval + colorDisplacement )	
								color.ColorSlider(colorInterval, cxMx - colorDisplacement, red, orange);
							else if ( cxMx < ( 2 * colorInterval + colorDisplacement ) )
								color.ColorSlider(colorInterval, cxMx - colorInterval - colorDisplacement, orange, yellow);
							else if ( cxMx < ( 3 * colorInterval + colorDisplacement ) )		
								color.ColorSlider(colorInterval, cxMx - 2 * colorInterval - colorDisplacement, yellow, green);
							else if ( cxMx < ( 4 * colorInterval + colorDisplacement ) )
								color.ColorSlider(colorInterval, cxMx - 3 * colorInterval - colorDisplacement, green, teal);
							else if ( cxMx < ( 5 * colorInterval + colorDisplacement ) )
								color.ColorSlider(colorInterval, cxMx - 4 * colorInterval - colorDisplacement, teal, blue);
							else
								color.ColorSlider(colorInterval, cxMx - 5 * colorInterval - colorDisplacement, blue, purple);
						}//UnComment Below For Circular Rainbow*/
						/*totalAngleUnits = Math.round( ( r * ( 2 * Math.PI ) - 1 ) * Math.PI );//  * Math.PI  Seems To Be Wrong But Is Necessary With Math Inaccuracy!
						if ( r==0 )
							wr.setPixel(cx, cy, color.RGB);
						for (a = 0; a <= totalAngleUnits; a++)//a = angle interval so that all angles are included
						{
							wr.setPixel( (int)Math.round( cx + Math.cos( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ),
									(int)Math.round( cy + Math.sin( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), color.RGB);
							//wr.setPixel( (int)Math.round( cx - Math.cos( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), (int)Math.round( cy + Math.sin( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), color.RGB);
							//wr.setPixel( (int)Math.round( cx + Math.cos( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), (int)Math.round( cy - Math.sin( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), color.RGB);
							//wr.setPixel( (int)Math.round( cx - Math.cos( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), (int)Math.round( cy - Math.sin( ( a/totalAngleUnits ) * 2 * Math.PI ) * r ), color.RGB);
						}// */
					}//*///Comment Out Here For Rainbow Slider
					//}//Comment Out Here ?
					//}//Comment Out Here ?
					f.invalidate();
					f.revalidate();
					f.repaint();
					//}
					//choice = 1;
				}
			}
			else if (choice == 1)
			{
				Dim = f.getSize();

				//Thread.sleep(1000);
				choice = 2;
			}
			else if (choice == 2)
			{
				Dim = f.getSize();

				//Thread.sleep(1000);
				choice = 4;
			}
		}
	}
}

//System.exit(0);

/*public class MainCanvas extends Canvas
{
    public void paint(Graphics g)
    {
        g.drawImage(Sonnet.I, 0, 0, Color.red, null);
        //Dim = getSize();
        //g.drawOval(0, 0, Dim.width, Dim.height);
    }
}
/*for (int i = 0; i < screenSizeX; ++i)
for(int j = 0; j < screenSizeY; ++j)
	I.setRGB(i, j, 0x000000); // Black Background
for (int j = 0; j<45; ++j)
I.setRGB(j, j, 0); // Scratch upper left corner
if(1>0)
{
	int x = screenSizeX - borderSizeX, y = screenSizeY - borderSizeY;
	int[] a = new int[y*x*3]; // 96 bit pixels
	for(int j = 0; j<y; ++j)
		for(int i = 0; i<x; ++i)
		{
			int z = 3*(j*x + i);
			a[z] = i; a[z+1] = j; a[z+2] = 128;
		}
		wr.setPixels(20, 20, x, y, a);
	}
	else
	{
		int[] a = new int[3];
		a[2] = 128;
		for(int j = 0; j<screenSizeY-40; ++j)
		{
			a[1] = j;
			for(int i = 0; i<screenSizeX-40; ++i)
			{
			a[0] = i;
			wr.setPixel(20+i, 20+j, a);
		}
	}
}
for(int q = 0; q < args.length; ++q)
        {
           int z = args[q].lastIndexOf('.');
           if (z > 0) try
           {
        	   ImageIO.write(
                I, args[q].substring(z+1),
                new File(args[q]));
           }
           catch (IOException e)
           {
            	  System.err.println("image not saved.");
           }

        }
 */
